package com.szholly.data.general;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.szholly.utils.util.TreeDataNode;

/**
 * 定义字典操作接口
 */
public interface IDomain {
	
	/**
	 * 节点id
	 */
	public final static String ID = "DOMAINID";
	
	/**
	 * 父节点id
	 */
	public final static String PID = "PDOMAINID";
	
	/**
	 * 代码值
	 */
	public final static String DOMAINCODE = "DOMAINCODE";
	
	/**
	 * 字典域显示值
	 */
	public final static String DOMAINCAPTION = "DOMAINCAPTION";

	/**
	 * 排序字段
	 */
	public final static String ORDER = "ORDER";
	
	/**
	 * 级别
	 */
	public final static String JB = "JB";
	
	/**
	 * 是否为叶子节点
	 */
	public final static String ISCHILD = "ISCHILD";
	
	/**
	 * 字典域名称
	 */
	public final static String DOMAINNAME = "DOMAINNAME";
	
	/**
	 * 字典表的是否使用字段名称
	 */
	public final static String ISUSER = "ISUSER";
	
	/**
	 * 字典表的是否可编辑字段名称
	 */
	public final static String ISEDIT = "ISEDIT";
	
	/**
	 * 字典表的单位
	 */
	public final static String UNIT = "UNIT";
	
	/**
	 * 获取字典域别名，用于显示
	 * @return
	 */
	String getDomainAliasName();
	
	/**
	 * 获取代码值，此值主要用于代码翻译
	 */
	HashMap<String, String> getDomains();
	
	/**
	 * 获取代码值，此值主要用于代码翻译，包括单位的翻译
	 */
	HashMap<String, String[]> getDomainsEx();
	
	/**
	 * 获取所有的记录数
	 * 主要用于数据绑定
	 */
	List<RowBase> getDatas();
	
	/**
	 * 获取所有数据，并转换成可绑定的数据对象
	 * @return
	 */
	List<TreeDataNode> getDatasEx();
	
	/**
	 * 获取所有数据，并转换成可绑定到TreeGrid的数据对象
	 * @param 是否转换为标准字段
	 * @return
	 */
	List<Map<String, Object>> getDatasEx2(boolean convertStaticField);
	
	/**
	 * 获取带权限过滤的数据，并转换成可绑定的数据对象
	 * @return
	 */
	List<TreeDataNode> getDatasEx(HashMap<String, Object> filterMap, String extKey, String extVal);

	/**
	 * 获取过滤的数据，并转换成可绑定的数据对象
	 * @return
	 */
	List<TreeDataNode> getDatasEx(HashMap<String, Object> filterMap);
	/**
	 * 获取下级数据对象
	 * @param id
	 * @return
	 */
	List<RowBase> getNextDatas(String id);
	
	/**
	 * 获取下级数据对象，并转换成可绑定对象
	 * @param id
	 * @return
	 */
	List<TreeDataNode> getNextDatasEx(String id);
	
	/**
	 * 获取是否是树型表
	 */
	Boolean getIsTreeCode();

	/**
	 * 获取当前字段的代码表
	 */
	ITable getCodeTable();

	/**
	 * 如果有代码表，获取ID字段名称
	 */
	String getIDFieldName() ;

	/**
	 * 如果有代码表，获取PID字段名称
	 */
	String getPIDFieldName();

	/**
	 * 如果有代码表，获取代码字段名称
	 */
	String getCodeFieldName();

	/**
	 * 如果有代码表，获取显示字段名称
	 */
	String getCaptionFieldName();
	
	/**
	 * 获取是否管理的代码表
	 */
	boolean getIsManageCodeTable();
	
	/**
	 * 获取排序字段名
	 */
	String getOrderFieldName();

	/**
	 * 获取是否使用字段名
	 */
	String getIsUsedFieldName();

	/**
	 * 获取是否可编辑字段名
	 */
	String getIsEditFieldName();

	/**
	 * 获取单位字段
	 */
	String getUnitFieldName();
	
	/**
	 * 获取级别字段名
	 */
	String getLevelFieldName();

	/**
	 * 获取字典阈名称
	 */
	String getDomainFieldName();
	
	/**
	 * 获取是否是子节点字段名
	 * @return
	 */
	String getIsChildFieldName();
}